即使最壞情況發生,也要降低損失
(以下的公式都為Notion KaTeX)
明文不行嗎
密碼明文放資料庫,資料庫不是誰都可以連的吧?為什麼還要雜湊/加密?
理論上是這樣,但是雜湊並不是只應用在密碼上。而且萬一密碼外流的風險應該是誰也擔不起的,所以需要雜湊去處理這些資料。
密碼外洩之員工監守自盜、駭客攻擊、備份外流、第三方資料庫沒設密碼等等
家賊難防(https://www.ithome.com.tw/tech/94902)
駭客攻擊(https://technews.tw/2022/08/04/hackers-stole-passwords-for-accessing-140000-payment-terminals/)
備份外洩(https://www.ithome.com.tw/news/63035)
雜湊不等於加密
Brute Force(窮舉法)
Dictionary Attacke(字典法)
Rainbow Tables(彩虹表)
以上圖為例,H(wikipedia)=ao4kd,R(ao4kd)=secret,secret就是新的密碼明文。再進行一次雜湊方程H(secret)=9kpmw,重複一個特定的數字後,就會得到ㄧ條長長的雜湊鏈
以k=3為例:
這條雜湊鏈不需要全部儲存下來,只需要存起點(wikipedia)與終點(rootroot),因為不需儲存整個雜湊鏈,儲存空間只需要1/k,大大節省了儲存空間。
假設已知一個密文v0d$x,R(v0d$x)=rootroot,rootroot可以對應到雜湊鏈的終點,此時可以從起點(wikipedia)開始驗證
假設密文是9kpmw,進行k次H方程與R函數。若是可以對應到終點,則可以反推回明文;若是無法對應到終點,代表此密文應存於另外的雜湊鏈中。
Birthday Attack (生日攻擊)
原型
由Birthday Paradox可以得出在K數數中均勻碰撞概率為
若n為大數,可列出估計概率
假設碰撞概率需大於0.5
假設使用16位元雜湊,則會有2的16次方種可能輸出,發生碰撞機率為50%僅需要320次嘗試
假設使用32位元雜湊,則會有2的32次方種可能輸出,發生碰撞機率為50%僅需要82137次嘗試
依據鴿巢原理,在固定置換次數下,有機率進行碰撞
造成Hash collision主要有兩個要素
Meet in the middle attack (中途相遇攻擊)
Preimage attack (原像攻擊)
參考資料
https://zh.wikipedia.org/zh-tw/%E5%BD%A9%E8%99%B9%E8%A1%A8
https://zh.wikipedia.org/zh-tw/%E6%95%A3%E5%88%97%E5%87%BD%E6%95%B8
以前經常把雜湊與加密的概念混淆在一起,想說不都是變成看不懂的東西嗎?
雜湊 (Hash) 是個單向操作,如文中所說原則上不可逆。
加密 (Encrypt) 與解密 (Decrypt) 是成對的雙向操作,擁有金鑰的人才能讀取密文。
另外 Encrypt 也容易跟 Encode 搞混,即便他們的意義相差甚遠:
編碼 (Encode) 與解碼 (Decode) 也是成對的雙向操作,但主要是針對檔案格式。
例如用編碼器將聲音編碼為 .mp3 格式,使用時透過解碼器將他還原成聲音訊號播放出來,與加解密不同之處在於任何人都可以透過該文件格式的解編碼規範來進行讀寫。